package com.ruoyi.result.utils;


import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.AppendObjectRequest;
import com.aliyun.oss.model.AppendObjectResult;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    private String accessKeyId = "LTAI5tSocW5TnZcarL8VeRUf";
    private String accessKeySecret = "Nt6sE0P11b9Q4Psk6sPSxBfCCfG6JU";
    private String bucketName = "790web-thesis";




    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }


    /**
     * 实现上传图片到OSS,设置文件为追加上传
     */
    public String uploadAppend(MultipartFile file, boolean isAppendable) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        // 上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        if (isAppendable) {
            // 设置追加模式
            long position = 0;  // 初始位置为0，可以根据实际情况调整
            AppendObjectRequest appendObjectRequest = new AppendObjectRequest(bucketName, fileName, inputStream);
            appendObjectRequest.setPosition(position);  // 设置 position 参数
            AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
        } else {
            // 普通上传
            ossClient.putObject(bucketName, fileName, inputStream);
        }

        // 文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭 ossClient
        ossClient.shutdown();
        return url; // 把上传到 oss 的路径返回
    }



}
